<?php

namespace Safe;

use Safe\Exceptions\StatsException;

/**
 * Returns the covariance of a and b.
 *
 * @param array $a The first array
 * @param array $b The second array
 * @return float Returns the covariance of a and b.
 * @throws StatsException
 *
 */
function stats_covariance(array $a, array $b): float
{
    error_clear_last();
    $result = \stats_covariance($a, $b);
    if ($result === false) {
        throw StatsException::createFromPhpError();
    }
    return $result;
}


/**
 * Returns the standard deviation of the values in a.
 *
 * @param array $a The array of data to find the standard deviation for. Note that all
 * values of the array will be cast to float.
 * @param bool $sample Indicates if a represents a sample of the
 * population; defaults to FALSE.
 * @return float Returns the standard deviation on success; FALSE on failure.
 * @throws StatsException
 *
 */
function stats_standard_deviation(array $a, bool $sample = false): float
{
    error_clear_last();
    $result = \stats_standard_deviation($a, $sample);
    if ($result === false) {
        throw StatsException::createFromPhpError();
    }
    return $result;
}


/**
 * Returns the Pearson correlation coefficient between arr1 and arr2.
 *
 * @param array $arr1 The first array
 * @param array $arr2 The second array
 * @return float Returns the Pearson correlation coefficient between arr1 and arr2.
 * @throws StatsException
 *
 */
function stats_stat_correlation(array $arr1, array $arr2): float
{
    error_clear_last();
    $result = \stats_stat_correlation($arr1, $arr2);
    if ($result === false) {
        throw StatsException::createFromPhpError();
    }
    return $result;
}


/**
 * Returns the inner product of arr1 and arr2.
 *
 * @param array $arr1 The first array
 * @param array $arr2 The second array
 * @return float Returns the inner product of arr1 and arr2.
 * @throws StatsException
 *
 */
function stats_stat_innerproduct(array $arr1, array $arr2): float
{
    error_clear_last();
    $result = \stats_stat_innerproduct($arr1, $arr2);
    if ($result === false) {
        throw StatsException::createFromPhpError();
    }
    return $result;
}


/**
 * Returns the variance of the values in a.
 *
 * @param array $a The array of data to find the standard deviation for. Note that all
 * values of the array will be cast to float.
 * @param bool $sample Indicates if a represents a sample of the
 * population; defaults to FALSE.
 * @return float Returns the variance on success; FALSE on failure.
 * @throws StatsException
 *
 */
function stats_variance(array $a, bool $sample = false): float
{
    error_clear_last();
    $result = \stats_variance($a, $sample);
    if ($result === false) {
        throw StatsException::createFromPhpError();
    }
    return $result;
}